const commentDB = wx.cloud.database({
  env: 'cloud-xd-cinema-7gslp6hy10b4bc57'
});

/**
 * function: 向某一集合中加入一条数据 
 * @param {String} dataName - 集合名称
 * @param {String} data - 插入参数
 * @return {object} - 以Promise形式调用
 */
function createDataDB(dataName, data) {
  const todos = commentDB.collection(dataName);
  return new Promise((resolve, reject) => {
    todos.add({
      // data 字段表示需新增的 JSON 数据
      data: data,
      success: function (res) {
        // res 是一个对象，其中有 _id 字段标记刚创建的记录的 id
        console.log("---向" + dataName + "中插入数据成功---");
        resolve(res);
      },
      fail: (err) => {
        console.error("--向" + dataName + "中插入数据失败--");
        reject(err)
      }
    })
  })

}
/**
 * function: 按集合中指定_id查找某一条数据,Promise形式调用
 *@param {string} dataName - 集合名称
 *@param {string} _id - 集合中的_id
 *@return {object} Promise形式调用
 */
function selectDbById(dataName, _id) {
  const todos = commentDB.collection(dataName);
  return todos.doc(_id).get();
}

/**
 * function ：在集合中按指定id查找某一类别数据
 *@param {string} dataName - 集合名称
 *@param {json} typeId - 类别以及指定id
 *@return {object} Promise形式调用
 */
function selectDBByType(dataName, typeId) {
  console.log("查询" + JSON.stringify(typeId) + "的全部数据");
  const todos = commentDB.collection(dataName);
  return todos.where(
    typeId
  ).get()

}

/**
 * function: 分页查询集合中数据,不指定类别
 * @param {string} dataName - 集合名称
 * @param {number} number - 序列
 * @return {object} Promise形式调用从指定序列后的结果开始返回
 */
function limitPage(dataName, number) {
  console.log("从" + dataName + "查询数据" + number + "条");
  const todos = commentDB.collection(dataName);
  return todos.skip(number)
    .get()
}

/**
 * function:指定类别分页查询
 * @param {string} dataName - 集合名称
 * @param {object} typeId - where的条件
 * @param {number} location - skip中的起始位置
 * @param {number} limitNum - limit中每次查询条数
 * @return {onject} Promise 形式调用
 */
function limitPageOfType(dataName, typeId, location, limitNum) {
  console.log("从" + dataName + "中查询类别为" + JSON.stringify(typeId) + "的" + limitNum + "条数据," + "起始位置为" + location);
  const todos = commentDB.collection(dataName);
  return todos.where(typeId).skip(location).limit(limitNum).get()
}

/**
 * function：更新集合中的字段值
 * @param {string} dataName - 集合名称
 * @param {object} openid - where中的条件 
 * @param {object} data - updata中的条件
 * @return {promise} 以promise形式调用 
 */
function updateDbById(dataName, openid, data) {
  const todos = commentDB.collection(dataName);
  console.log("修改" + dataName + "中的" + JSON.stringify(openid) + "数据");
  return new Promise((resolve, reject) => {
    todos.where(openid).update({
      // data 传入需要局部更新的数据
      data: data,
      success: function (res) {
        resolve(res)
      },
      fail: (err) => {
        console.warn("修改失败");
        reject(err);
      }
    })
  })

}
/**
 * module：云开发中wx部分集合操作封装 
 * @module  */

module.exports = {
  createDataDB,
  selectDbById,
  selectDBByType,
  limitPage,
  limitPageOfType,
  updateDbById
}